package bd;

import java.io.IOException;

import negocios.Chat;
import negocios.ColecaoUsuarios;
import negocios.Convite;
import negocios.MensagemTexto;
import negocios.SMS;

import org.w3c.dom.DOMException;

import bd.excecoes.XMLException;

/**
 * Fachada da camada de banco de dados, a ser acessada pelas demais camadas.
 * 
 * @author Jonathan Brilhante
 * @author Jose Rafael
 * @author Nate Venancio
 * @author Renato Almeida
 * 
 * @version 1.0
 */

public class FacadeBD {
	private static FacadeBD instance;

	/**
	 * Construtor privado da classe
	 */
	private FacadeBD() {
	}

	/**
	 * Retorna a instancia unica da fachada.
	 * 
	 * @return a instancia unica da fachada.
	 */
	public static FacadeBD getInstance() {
		if (instance == null) {
			instance = new FacadeBD();
		}
		return instance;
	}

	/**
	 * Metodo que retorna todos os usuarios do banco de dados.
	 * 
	 * @return a colecao de usuarios armazenada no banco de dados.
	 * @throws IOException
	 * @throws XMLException
	 * @throws DOMException
	 */
	public ColecaoUsuarios getUsuarios() throws DOMException, XMLException,
			IOException {
		return EditorXML.getInstance().getUsuarios();
	}

	/**
	 * Salva as modificacoes ocorridas no XML.
	 * 
	 * @param usuarios
	 */
	public void salvaModificacoes(ColecaoUsuarios usuarios) {
		EditorXML.getInstance().salvaModificacoes(usuarios);
	}

	/**
	 * Faz o log do email no historico
	 * 
	 * @param email
	 *            o email a ser guardado
	 * @throws IOException
	 *             caso o log do historico nao seja encontrado
	 */
	public void logEmail(MensagemTexto email) throws IOException {
		EditorHistorico.getInstance().logEmail(email);
	}

	/**
	 * Faz o log do SMS no historico
	 * 
	 * @param sms
	 *            o SMS a ser guardado
	 * @throws IOException
	 *             caso o log do historico nao seja encontrado
	 */
	public void logSMS(SMS sms) throws IOException {
		EditorHistorico.getInstance().logSMS(sms);
	}

	/**
	 * Faz o log do convite no historico
	 * 
	 * @param convite
	 *            o convite a ser guardado
	 * @throws IOException
	 *             caso o log do historico nao seja encontrado
	 */
	public void logConvite(Convite convite) throws IOException {
		EditorHistorico.getInstance().logConvite(convite);
	}

	/**
	 * Guarda um chat no historico do sistema
	 * 
	 * @param c
	 *            o chat a ser guardado
	 * @throws IOException
	 *             caso nao seja possivel criar o arquivo
	 */
	public void logChat(Chat c) throws IOException {
		EditorHistorico.getInstance().logChat(c);
	}
}